เชื่อมต่อ Amazon S3 ด้วย WinSCP

เชื่อมต่อ Amazon S3 ด้วย WinSCP

Clock Icon2022.06.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ครั้งนี้จะมาทำการเชื่อมต่อ S3 จาก WinSCP โดยใช้IAM access key รวมไปถึงเปิดการเข้าถึง S3 server access logs และตั้งค่าจัดเก็บ access logs กันครับ

ขั้นตอนการตั้งค่า

การตั้งค่าหลักๆจะแยกเป็น2ส่วน ส่วนแรกจะเป็นการตั้งค่าฝั่งAWS และ อีกส่วนจะเป็นการตั้งค่าในฝั่งของClient

  • การตั้งค่าฝั่งAWS
    1-1. การสร้าง S3 BUCKET
    1-2. การตั้งค่า S3 Server access logs
    1-3. การออก Access key และสร้าง IAM User
  • การตั้งค่าฝั่งClient
    2-1. การติดตั้ง WinSCP
    2-2. ตรวจสอบการเชื่อมต่อ
  • 1.การตั้งค่าฝั่งAWS

    1-1.การสร้าง S3 BUCKET

    สร้างS3 Bucket ที่จะเชื่อมต่อกับWinSCP จากหน้า management console

    ตั้งชื่อS3 bucket, AWS Regionได้ตามสะดวก และเลือกปิดACL เพราะACLเป็นวิธีการจัดการการเข้าถึงS3แบบเก่าจึงไม่แนะนำให้เปิดใช้งาน และในบทความนี้ไม่มีความจำเป็นต้องตั้งค่าpublic access ให้เลือกblock public accessได้เลยจากนั้นและไปที่ขั้นตอนต่อไป

    ตั้งค่าตามด้านล่างนี้ โดยในหัวข้อ Default encryption ให้เลือก Amazon S3-managed keys (SSE-S3)

    เลื่อนลงไปทางด้านล่าง และเลือก Create bucket

    ในขั้นตอนเดียวกันนี้ เราจะสร้างs3 bucketสำหรับการจัดเก็บ server access logs หากเราไม่ต้องการตั้งค่าในส่วนนี้ก็สามารถข้ามไปได้ ในการตั้งค่าการสร้างs3 bucketสำหรับการจัดการserver access logs มีข้อควรระวังดังนี้

    ข้อควรระวัง

  • ในs3 bucketสำหรับจัดเก็บ server access logsจะไม่รองรับการทำ object lock ได้
  • ในs3 bucketสำหรับจัดเก็บ server access logsค่าเริ่มต้นสำหรับ Default encryption จะเป็น "ไม่ใช้งาน" หรือ "SSE-S3"
  • Why aren't my Amazon S3 server access logs getting delivered?

    1-2. การตั้งค่า S3 Server access logs

    การตั้งค่าS3 Server access logsทำตามขั้นตอนดังนี้
    จากหน้าconsoleของS3ไปที่ ”bucket” แล้วเลือกs3 bucketที่จะเชื่อมต่อ → propertiesServer access logs และเลือก edit

    เลือก Enable Server access logging จากนั้นเลือกTarget bucketสำหรับเก็บlogs จริงๆแล้วสามารถเก็บlogs ลงในbucketของตนเองก็ได้แต่แนะนำให้เก็บในbucketอื่นจะดีกว่าครับ

    เสร็จสิ้นการตั้งค่าaccess logs

    สาเหตุที่แนะนำให้เก็บในbucketอื่น

    เพื่อการควบคุมlogsที่ง่ายขึ้น จึงแนะนำให้เก็บ access logs ในbucketแยก ในกรณีที่มี sort bucket และ target bucket เดียวกัน ก็จะมีสร้างlogsเพิ่มสำหรับเขียนข้อมูลลง bucket ซึ่งค่าใช้จ่ายของ storage ก็มีโอกาสที่จะสูงขึ้นตาม ยิ่งไปกว่านั้นเนื่องจากมีlogsเพิ่มขึ้นจะทำให้การค้นหา logs ที่จำเป็นยากขึ้นไปอีก

    Logging requests using server access logging

    1-3.การออก Access key และสร้าง IAM User

    จากนั้น เราจะมาออก Access key และสร้าง IAM User โดยเข้าไปที่หน้าบริการ IAM เลือก userจากนั้นเลือก add user

    ตั้งชื่อตามสะดวก และเลือก credential type เป็นAccess key - Programmatic accessเนื่องจากเป็นผู้ใช้งานที่ไม่ใช้ผ่าน console จึงไม่เลือกตรงหัวข้อmanagement console

    การตั้งค่าสิทธ์ต่างๆจะทำในภายหลังจึงยังไม่ต้องตั้งค่าในส่วนนี้

    ไม่ต้องตั้งค่าtagไปการตั้งค่าต่อไปได้เลย

    หลังจากตรวจสอบเนื้อหาแล้ว ให้เลือกที่ Create user

    หลังจากสร้างuserสำเร็จแล้ว ระบบจะออก secret access keyออกมาจะบันทึกโดยการจดโน้ตหรือจะโหลดเป็น CSV ไฟล์ก็ได้แล้วแต่ความสะดวก หากลืมsecret keyจะต้องออก access key ใหม่เท่านั้น และหากข้อมูลนี้อยู่ในมือบุคคลที่3จะสามารถตั้งค่าการเข้าถึงสิทธ์ต่างๆของเราได้ เพราะฉะนั้นการเก็บข้อมูลเป็นโน้ต หรือ โหลด CSV ไฟล์จึงเป็นสิ่งสำคัญมาก

    หลังจากนั้นเลือก "User" ที่สร้างจาก IAM แล้วเลือก PermissionและAdd inline policy

    ที่จริงแล้วมีวิธีที่จะสร้างpolicyแยกทีล่ะรายการแต่ในครั้งนี้จะเลือกเป็น inline policy โดยข้อแตกต่างระหว่าง inline policy และ control policy สามารถตรวจสอบได้ทางด้านล่างนี้ครับ

    เปรียบเทียบ inline policy และ control policy

    จากหน้าการตั้งค่า inline policy ให้นำข้อมูล policy ทางด้านล่างที่ระบุเป็น json ไปลง โดย 「bucket-name」 ให้เปลี่ยนเป็นชื่อs3bucketที่จะเชื่อมต่อ หรือจะเพิ่มสิทธิ์เช่น PutObject หรือ DeleteObject เข้าไปก็ได้ตามการใช้งาน

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "ListObjectsInBucket",
                "Effect": "Allow",
                "Action": ["s3:ListBucket"],
                "Resource": ["arn:aws:s3:::bucket-name"]
            },
            {
                "Sid": "GetObjectAction",
                "Effect": "Allow",
                "Action": "s3:GetObject",
                "Resource": ["arn:aws:s3:::bucket-name/*"]
            }
        ]
    }

    ข้อมูลอ้างอิงสำหรับสิทธิ์ในการตั้งค่า

  • Amazon S3 actions
  • Actions, resources, and condition keys for Amazon S3
  • ตั้งชื่อpolicyตามสะดวก

    ก็จะเป็นเสร็จสิ้นการตั้งค่าฝั่งAWS

    2.การตั้งค่าฝั่ง client

    ติดตั้งWinscpเพื่อเชื่อมต่อกับs3 รายละเอียดตามด้านล่างนี้ครับ

  • Access key (ขั้นตอนที่ 1-3)
  • Secret key (ขั้นตอนที่ 1-3)
  • S3 buncketที่จะเชื่อมต่อ
  • 2-1.ติดตั้งWinSCP

    interface styleแล้วแต่ความชอบ แต่ในครั้งนี้จะเลือกเป็น commander

    ถ้าเลือกเป็น Open Getting started page จะเป็นการเปิดหน้าเว็บไซต์ ไม่ต้องเลือกก็ได้

    เสร็จสิ้นการติดตั้ง WinSCP

    2-2.ทดสอบการเชื่อมต่อ

    เมื่อเปิดการใช้งาน winscpจะแสดงหน้าตั้งค่าใส่ข้อมูลการเชื่อมต่อขึ้นมาให้เลือกprotocolเป็นS3

    ใส่access key และ secret key ที่ออกมาจากขั้นตอนที่1-3เข้าไปแล้วเลือกหัวข้อAdvancedที่อยู่ทางด้านล่าง

    ในหัวข้อ Enviroment ให้ใส่bucket nameที่จะเชื่อมต่อไปที่ Remote directoryตามตัวอย่างด้านล่างจะใส่คำว่า 「/target-backet-name」เข้าไป

    จากนั้นก็เลือกที่OKแล้วกลับไปที่หน้าก่อนหน้า แล้วเลือกที่loginก็จะสามารถเชื่อมต่อได้ครับ

    ตอนนี้สามารถเชื่อมต่อได้แล้ว

    ข้อมูลเพิ่มเติม

    ในส่วนของการตั้งค่านั้นจบแล้วแต่จะแนะนำข้อมูลเพิ่มเติมตามด้านล่างนี้ครับ

    สิทธ์ในการเข้าถึง

    หากไม่ทำการRemote directoryจะเชื่อมต่อไม่ได้แล้วขึ้นแจ้งเตือนตามด้านล่าง

    ในกรณีที่ตั้งค่าสิทธิ์จาก IAM User เช่น S3FullAccess แล้วเชื่อมต่อโดยไม่ Remote directory ก็สามารถเชื่อมต่อได้แต่จะแสดงข้อมูล S3 bucket อื่นๆที่ไม่จำเป็นขึ้นมาด้วยซึ่งในครั้งนี้เราต้องการระบุbucketที่จะแสดงจึงต้องตั้งค่านี้

    access logs

    เมื่อเปิด bucket สำหรับเก็บ access logs จะพบ logs file จัดเก็บไว้ตามภาพนี้ครับ

    ตรวจสอบ user guide ที่เกี่ยวกับ log format ได้ทางด้านล่างนี้ครับ
    Amazon S3 server access log format

    เนื่องจากlogs fileจะมีจำนวนมาก การตรวจสอบทีละตัวค่อนข้างใช้เวลาและไม่สะดวกเท่าไหร่นัก โดยผู้ใช้งานสามารถนำathenaมาปรับใช้เพื่อรวบรวมข้อมูลได้โดยรายละเอียดเพิ่มเติมจะอยู่ทางด้านล่างนี้ครับ

    How do I analyze my Amazon S3 server access logs using Athena?

    สรุป

    การเชื่อมต่อ S3 ผ่าน WinSCP นั้นสะดวกมาก ทั้งๆที่เป็นโปรแกรมเก่าแก่มาตั้งแต่สมัยยุคปี 2000 โดยในปัจจุบันยังคงมีอัพเดทอย่างต่อเนื่อง โดยในปัจจุบันสามารถซัพพอร์ท OpenSSL ได้อีกด้วย โดยอยากให้มีอัพเดทฟังก์ชั่นต่างๆเพิ่มขึ้นต่อไปอีกเรื่อยๆ และหวังว่า

    บทความที่เกี่ยวข้อง

  • Amazon S3 คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022
  • How To Static Website EP2: การเก็บข้อมูลเว็บไซต์ลงบน Amazon S3 เพื่อให้ไปแสดงผลผ่าน Amazon CloudFront
  • การอัปโหลดข้อมูลไปยัง Amazon S3 ด้วย CloudBerry Explorer
  • การลบไฟล์อัตโนมัติด้วย S3
  • วิธีอัปโหลดไฟล์ด้วย WinSCP ไปยัง Server Website ที่ตั้งค่าใน EC2
  • WinSCP Official Site
  • https://github.com/winscp/winscp
  • AWS:Why aren't my Amazon S3 server access logs getting delivered?
  • AWS:Logging requests using server access logging
  • AWS:Choosing between managed policies and inline policies
  • AWS:Amazon S3 server access log format
  • AWS:How do I analyze my Amazon S3 server access logs using Athena?
  • S3のサーバーアクセスログから、接続失敗ログを洗い出す
  • 新サービスAWS Transfer for SFTPを使って、WinSCPからS3へアクセスする #reinvent
  • WinSCPでAmazon LinuxにSFTP接続してみた
  • この記事をシェアする

    facebook logohatena logotwitter logo

    © Classmethod, Inc. All rights reserved.